#ifndef ARRAY_H
#define ARRAY_H

#define DEFAULT_SIZE 4

typedef unsigned int uint32_t;
class Array 
{
    //属性
    private:
        int *data; // 指向数组的指针,存储数据的指针   因为如果是数组就不好更改了，所以用指向数据的指针
        uint32_t size; // 数组的大小，一定要大于0所以define一个uint32_t类型的size属性
        uint32_t itemNum; // 数组中实际存储的元素个数
        // 注意：如果不使用指针而是直接使用数组，那么在拷贝构造函数中就无法实现深拷贝，因为数组的大小是固定的，无法动态调整
        static int IndexERROR; // 索引错误的标志
        //自动扩容
        void extend();
    //方法
    public:
        
        // 构造函数
        Array();//默认构造函数
        Array(const Array &); // 拷贝构造函数
        Array(uint32_t); // 带参数的构造函数
        ~Array(); // 析构函数

        //获取数组的大小
        uint32_t get_size() const;

        //返回元素的个数
        uint32_t get_itemNum() const;

        //获取指定位置的元素
        int get_data(uint32_t);
        
        //销毁动态数组
        void destroy();

        //在指定位置插入
        void insert(uint32_t, int);

        //在指定位置删除
        bool remove_index(uint32_t);

        //删除指定的元素
        void remove_data(int);
};

#endif